這篇介紹 Semantic Search 使用和相關注意事項。
上一篇我大概介紹了Semantic Search功能,也示範了該如何安裝及註冊Semantic Search,
這篇我們繼續來看如何使用Semantic Search及建立所需注意事項。
Semantic Indexes注意事項
這裡我將利用之前所建立的 FileTable 來示範如何使用Semantic Search
FileTable文件來源
1.建立Semantic Indexes
先確認Semantic Search所支援文件類型
select * from sys.fulltext_document_types
where document_type in ('.pdf','.docx','.doc','.ppt','.pptx')
可以看到文件類型少了.docx、.pptx、pdf。
變更篩選清單
安裝office filter packages(支援.docx 、.pptx)
安裝 Adobe PDF iFilter (支援.pdf)
成功後執行以下TSQL變更篩選清單(參考如何:更改已註冊的斷詞工具和篩選清單 (Transact-SQL))
exec sp_fulltext_service @action= 'load_os_resources', @value= 1
exec sp_fulltext_service 'restart_all_fdhosts';
重新啟動SQL Services後再次確認文件類型
可以看到 docx、pdf和pptx文件類型了。
下面我們繼續來建立全文檢索目錄和Semantic Indexes(1使用SSMS,2使用TSQL)。
建立全文檢索目錄和Semantic Indexes(Using SSMS)
勾選統計語意。
選擇自動變更追蹤。
新增特定全文檢索目錄。
建立成功。
建立全文檢索目錄和全文檢索索引含Semantic Indexes(Using TSQL)
create fulltext index on dbo.Mydocs
(
name
language 1028 STATISTICAL_SEMANTICS,
file_stream
type column file_type
language 1028 STATISTICAL_SEMANTICS
)
key index PK_Mydocs_5A5B77D56E0F5D8F
on MyFTDocs
WITH
change_tracking auto,
stoplist = system;
確認Semantic Search是否OK
select * from sys.dm_fts_index_population where table_id =OBJECT_ID('dbo.Mydocs')
select * from sys.dm_fts_semantic_similarity_population where table_id =OBJECT_ID('dbo.Mydocs')
確認Status=Starting後,我們就可以執行Semantic Search。
使用 semantickeyphrasetable: 查看該FileTable目前全部關鍵詞組
select keyp.keyphrase
from semantickeyphrasetable
( dbo.Mydocs, file_stream ) as keyp
order by keyp.score desc
(擷取部分)。
使用semantickeyphrasetable: 搜尋(前30筆)相關文件內容中”效能”詞組。
select top(30) ft.name,ft.cached_file_size,keyp.keyphrase,keyp.score
from dbo.Mydocs as ft inner join semantickeyphrasetable(dbo.Mydocs,(name,file_stream)) as keyp on ft.path_locator=keyp.document_key
where keyp.keyphrase=N'效能'
order by keyp.score desc
Score越接近1,表示該關鍵詞組在文件中權重越高(詞組權重演算法可參考 Language model)。
使用 SEMANTICSIMILARITYTABLE : 依所指定的文件來找出相似文件。
declare @mydocid hierarchyid
select @mydocid=path_locator
from dbo.Mydocswhere name=N'善用parallel.doc'
select top(10) ft.name,ft.cached_file_size,keyp.score
from dbo.Mydocs as ft inner join SEMANTICSIMILARITYTABLE(dbo.Mydocs,file_stream,@mydocid) as keyp on keyp.matched_document_key =ft.path_locator
order by keyp.score desc
Score越接近1,表示該該文件相似度越高。
使用 semanticsimilaritydetailstable: 兩個指定文件中顯示common Key phrase(共同的關鍵詞組)。
declare @mydocid1 hierarchyid
declare @mydocid2 hierarchyid
select @mydocid1=path_locatorfrom dbo.Mydocs
where name=N'善用parallel.doc'
select @mydocid2=path_locator
from dbo.Mydocs
where name=N'交易處理觀念與理論.ppt'
select top(10) keyp.keyphrase, keyp.score
from semanticsimilaritydetailstable(dbo.Mydocs,file_stream,@mydocid1,file_stream,@mydocid2) as keyp order by keyp.score desc